package com.intelligent.system.common.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.intelligent.system.common.dto.MessageDTO;
import com.intelligent.system.common.dto.MessageQueryDTO;
import com.intelligent.system.common.response.ResultDO;

import java.util.List;

public interface IMessageService {
    
    /**
     * 发送消息
     *
     * @param messageDTO 消息信息
     * @return 发送结果
     */
    ResultDO<Void> sendMessage(MessageDTO messageDTO);
    
    /**
     * 发送广播消息
     *
     * @param messageDTO 广播消息信息
     * @return 发送结果
     */
    ResultDO<Void> sendBroadcast(MessageDTO messageDTO);
    
    /**
     * 获取消息详情
     *
     * @param id 消息ID
     * @return 消息详情
     */
    ResultDO<MessageDTO> getMessage(Long id);
    
    /**
     * 更新消息状态
     *
     * @param id 消息ID
     * @param status 消息状态
     * @return 更新结果
     */
    ResultDO<Void> updateStatus(Long id, Integer status);
    
    /**
     * 删除消息
     *
     * @param id 消息ID
     * @return 删除结果
     */
    ResultDO<Void> deleteMessage(Long id);
    
    /**
     * 分页查询消息列表
     *
     * @param page 分页参数
     * @param queryDTO 查询条件
     * @return 消息列表
     */
    ResultDO<IPage<MessageDTO>> pageMessages(Page<MessageDTO> page, MessageQueryDTO queryDTO);
    
    /**
     * 获取未读消息数量
     *
     * @param receiverId 接收者ID
     * @return 未读消息数量
     */
    ResultDO<Long> getUnreadCount(Long receiverId);
    
    /**
     * 获取用户的消息列表
     *
     * @param receiverId 接收者ID
     * @param queryDTO 查询条件
     * @return 消息列表
     */
    ResultDO<List<MessageDTO>> getUserMessages(Long receiverId, MessageQueryDTO queryDTO);
    
    /**
     * 批量更新消息状态
     *
     * @param ids 消息ID列表
     * @param status 消息状态
     * @return 更新结果
     */
    ResultDO<Void> batchUpdateStatus(List<Long> ids, Integer status);
    
    /**
     * 批量删除消息
     *
     * @param ids 消息ID列表
     * @return 删除结果
     */
    ResultDO<Void> batchDelete(List<Long> ids);
} 